package com.hb.core.pojo.center.au.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.hb.core.pojo.UserConfig;
import com.hb.core.pojo.parent.MPCommonEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.time.LocalDateTime;

/**
 * <p>
 * 系统用户表，表中用户包括两种类型，系统管理用户和招标业务用户
 * </p>
 *
 * @author zhaojk
 * @update ljs
 * @updateDate 2022-3-22
 * @since 2021-11-29
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("au_user")
public class User extends MPCommonEntity {

    /**
     * 组织机构Id(企业id)，冗余字段，与部门指向的企业对应
     */
    private Long orgId;

    /**
     * 部门ID
     */
    private Long deptId;

    /**
     * 用户名
     */
    private String username;

    /**
     * 头像
     */
    private String avatar;

    /**
     * 手机号码
     */
    private String phone;


    /**
     * 身份证号码
     */
    private String idNum;

    /**
     * 姓名
     */
    private String fullName;

    /**
     * 邮箱
     */
    private String email;

    /**
     * 密码
     */
    private String password;

    /**
     * 盐值
     */
    private String saltSource;

    /**
     * 用户类型(1: 超级管理员，2：企业管理员，3：常规用户，4：专家，5：招标人代表)
     */
    private Integer userType;

    /**
     * 用户状态(1: 正常, 2: 禁用, 3:待审核，4：驳回)
     */
    private Integer userStatus;

    /**
     * 租户Id
     */
    private Long tenantId;
    /**
     * 账号等级
     */
    private Integer accountLevel;
    /**
     * 审核时间
     */
    // @JsonFormat(shape= JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss")
    // @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime auditTime;
    /**
     * 失败原因
     **/
    private String reason;
    /**
     * 用户配置
     */
    private UserConfig userConfig;

    /**
     * 机构交易码
     */
    private String unifiedTransactionCode;

    /**
     * 参数验证方法
     * 所有的继承该类的DTO对象必须在调用时重写该方法
     * 该方法中验证的字段对应数据库中不能为空的字段
     *
     * @param fieldNames
     * @return
     */
    @Override
    public String paramsValid(String... fieldNames) {
        return super.paramsValid("orgId", "username", "phone",
                "fullName", "password", "userType", "userStatus");
    }
}
